package com.project.springboot.page;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gitee.yongzhuzl.commonutil.util.empty.EmptyUtil;
import com.gitee.yongzhuzl.commonutil.util.equals.EqualsUtil;

/**
 * description: 分页查询参数封装
 * @author 朱正磊
 * @date 2023-08-09 23:02:50
 */
public class PageQuery<T> {

    /**
     * description: 获取分页模型对象
     * @author 朱正磊
     * @date 2023-07-11 16:56:00
     * @return 返回分页模型对象
     */
    public IPage<T> getPage() {
        return this.getPage(null, null);
    }

    /**
     * description: 获取分页模型对象
     * @author 朱正磊
     * @date 2023-07-11 16:41:35
     * @param defaultOrderField 默认的排序字段（表字段名）
     * @param defaultOrderWay 默认的排序方式：ASC-升序；DESC-降序
     * @return 返回分页模型对象
     */
    public IPage<T> getPage(String defaultOrderField, String defaultOrderWay) {

        // 默认当前页数为1
        long pageNum = 1;

        // 默认每页记录数为10
        long pageSize = 10;

        // 前端传递过来的当前页数
        String pageNumParam = RequestHolder.getParameter(PageConstant.PAGE_NUM);
        if (EmptyUtil.isNotEmpty(pageNumParam)) {
            pageNum = Long.parseLong(pageNumParam);
        }

        // 前端传递过来的每页记录数
        String pageSizeParam = RequestHolder.getParameter(PageConstant.PAGE_SIZE);
        if (EmptyUtil.isNotEmpty(pageSizeParam)) {
            pageSize = Long.parseLong(pageSizeParam);
        }

        Page<T> page = new Page<>(pageNum, pageSize);

        // 前端传递过来的排序字段
        String orderFieldParam = RequestHolder.getParameter(PageConstant.ORDER_FIELD);
        // sql注入过滤
        orderFieldParam = SqlFilter.sqlInject(orderFieldParam);

        // 前端传递过来的排序方式
        String orderWayParam = RequestHolder.getParameter(PageConstant.ORDER_WAY);
        if (EmptyUtil.isNotEmpty(orderFieldParam) && EmptyUtil.isNotEmpty(orderWayParam)) {
            // 如果前端传递过来的排序字段和排序方式都不为空
            if (EqualsUtil.isEqualsIgnoreCase(PageConstant.ORDER_WAY_ASC, orderWayParam)) {
                // 根据排序字段升序排序
                return page.addOrder(OrderItem.asc(orderFieldParam));
            } else if (EqualsUtil.isEqualsIgnoreCase(PageConstant.ORDER_WAY_DESC, orderWayParam)) {
                // 根据排序字段降序排序
                return page.addOrder(OrderItem.desc(orderFieldParam));
            }
        }

        // 判断是否存在默认排序
        if (EmptyUtil.isNotEmpty(defaultOrderField) && EmptyUtil.isNotEmpty(defaultOrderWay)) {
            // 如果默认的排序字段和排序方式都不为空
            if (EqualsUtil.isEqualsIgnoreCase(defaultOrderWay, PageConstant.ORDER_WAY_ASC)) {
                // 根据默认排序字段升序排序
                return page.addOrder(OrderItem.asc(defaultOrderField));
            } else if (EqualsUtil.isEqualsIgnoreCase(defaultOrderWay, PageConstant.ORDER_WAY_DESC)) {
                // 根据默认排序字段降序排序
                return page.addOrder(OrderItem.desc(defaultOrderField));
            }
        }

        // 返回分页模型对象
        return page;
    }

}
